package com.opengroupe.dao;

import org.springframework.transaction.annotation.Transactional;

/**
 * 
 * Interface générique d'accès aux données 
 * @param <T>
 */
@Transactional
public interface Dao<T> {
	
	/**
	 * Ajoute l'élément dans la base de données
	 * @param object
	 * @return
	 * @throws Exception 
	 */
	public T persist(T object) throws Exception;
	
	/**
	 * Supprime l'élément de la base de données
	 * @param object
	 */
	public void remove(T object);
	
	/**
	 * Met à jour l'élément dans la base de données
	 * @param object
	 * @return 
	 * @throws Exception 
	 */
	public T merge(T object) throws Exception;
	
	/**
	 * Retrouve l'élément dans la base de données à partir de son identifiant
	 * @param id
	 * @return
	 */
	public T findById(Integer id);

}
